package com.asm.repository;

import com.asm.entity.sys.District;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author ZhunagGuiMan
 */
@Repository
public interface DistrictRepository extends JpaRepository<District, Long> {

    /**
     * 根据地区编号查询地区
     *
     * @param id 地区编号
     * @return 地区
     */
    @Query("select d from District d where d.id=:id and d.isDel=false ")
    District findDistinctById(@Param("id") Long id);

    /**
     * 获取数据库中所有地区的城市
     *
     * @param province 省份
     * @return 城市列表
     */
    @Query("select distinct d.city from District d where d.province=:province and d.isDel=false")
    List<String> findCitiesByProvinceAndIsDel(@Param("province") String province);

    /**
     * 获取数据库中所有地区的城市
     *
     * @param city 城市
     * @return 城市列表
     */
    @Query("select distinct d.district from District d where d.city=:city and d.isDel=false")
    List<String> findDistrictsByCityAndIsDel(@Param("city") String city);

    /**
     * 根据省市区查询地区
     *
     * @param province 省份
     * @param city     城市
     * @param district 地区
     * @param isDel 是否被删除
     * @return 地区列表
     */
    List<District> findByProvinceAndCityAndDistrictAndIsDel(String province, String city, String district, Boolean isDel);

    /**
     * 根据省份查找地区
     *
     * @param province 省份
     * @param isDel 是否被删除
     * @param page     分页
     * @return 地区分页
     */
    Page<District> findByProvinceAndIsDel(String province, Boolean isDel, Pageable page);

    /**
     * 根据城市查询地区
     *
     * @param city 城市
     * @param isDel 是否被删除
     * @param page 分页
     * @return 地区分页
     */
    Page<District> findByCityAndIsDel(String city, Boolean isDel, Pageable page);

    /**
     * 查询全部地区
     *
     * @param of 分页
     * @return 地区分页
     */
    @Query("select c from District c where c.isDel=false ")
    Page<District> findAll(PageRequest of);

    /**
     * 返回所有的省份的信息
     *
     * @return 所有的省份
     */
    @Query("select distinct c.province from District c where c.isDel=false ")
    List<String> findProvinces();

    /**
     * 根据省份查找地区
     *
     * @param province 省份
     * @param isDel 是否被删除
     * @return 地区列表
     */
    List<District> findDistinctByProvinceAndIsDel(String province, Boolean isDel);
}
